package com.xrit.sunnyday.controller;

import com.alibaba.dubbo.config.annotation.Reference;
import com.xrit.sunnyday.constant.MessageConstant;
import com.xrit.sunnyday.entity.PageResult;
import com.xrit.sunnyday.entity.QueryPageBean;
import com.xrit.sunnyday.entity.Result;
import com.xrit.sunnyday.pojo.Setmeal;
import com.xrit.sunnyday.service.SetmealService;
import com.xrit.sunnyday.utils.QiNiuUtils;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.UUID;

/**
 * 套餐管理
 * @author Daoying
 * creationTime: 2022/10/20 14:13
 */
@RestController
@RequestMapping("/setmeal")
public class SetmealController {

    @Reference
    private SetmealService setmealService;

    /**
     * 套餐上传图片
     * SpringMVC里面只有MultipartFile能接收前端文件的对象
     */
    @PostMapping("/upload")
    public Result upload(MultipartFile imgFile){
        //防止重名，所有必须重新起名字
        //获取原有图片名称
//        System.out.println("000000000000000000");
        String originalFilename = imgFile.getOriginalFilename();//获取文件的完整名称
        //截取到后缀名,从最后一个点“.”到结尾
//        System.out.println("11111111111111111");
        String extension = originalFilename.substring(originalFilename.lastIndexOf("."));
        //生成唯一文件名，拼接后缀名,使用UUID生成名字
        String filename = UUID.randomUUID() + extension;
//        System.out.println("222222222222222222");
        //调用七牛上传文件
        try {
            QiNiuUtils.uploadViaByte(imgFile.getBytes(), filename);
            //返回数据给页面
            //由于一个完整图片域名拆分成了2部分数据，所以考虑使用Map
            Map<String,String> map = new HashMap<String,String>();
            map.put("imgName",filename);
            map.put("domain", QiNiuUtils.DOMAIN);
            return new Result(true, MessageConstant.PIC_UPLOAD_SUCCESS,map);
        } catch (IOException e) {
            e.printStackTrace();
        }
        return new Result(false, MessageConstant.PIC_UPLOAD_FAIL);
    }

    /**
     * 添加套餐
     */
    @PostMapping("/add")
    public Result add(@RequestBody Setmeal setmeal,Integer[] checkgroupIds){
        //调用业务服务添加
        setmealService.add(setmeal,checkgroupIds);
        //响应结果
        return new Result(true,MessageConstant.ADD_SETMEAL_SUCCESS);
    }

    /**
     * 分页
     * @param queryPageBean
     * @return
     */
    @PostMapping("/findPage")
    public Result findPage(@RequestBody QueryPageBean queryPageBean) {
        //调用服务分页查询
        PageResult page = setmealService.findPage(queryPageBean);
        return new Result(true, MessageConstant.QUERY_SETMEAL_SUCCESS, page);
    }

    /**
     * 提供id查询套餐信息
     * @param id
     * @return
     * 后台Result等于前端res.data.data
     */
    @GetMapping("/findById")
    public Result findById(int id){
        //调用服务的查询
        Setmeal setmeal = setmealService.findById(id);
        //前端要显示图片需要全路径
        //封装map中，解决图片的路径问题
        Map<String, Object> hashMap = new HashMap<>();
        hashMap.put("setmeal",setmeal);
        hashMap.put("domain",QiNiuUtils.DOMAIN);
        return new Result(true,MessageConstant.QUERY_SETMEAL_SUCCESS,hashMap);
    }

    /**
     * 通过id查询选中的检查组ids
     */
    @GetMapping("/findCheckgroupIdsBySetmealId")
    public Result findCheckgroupIdsBySetmealId(int id){
        List<Integer> checkgroupIds = setmealService.findCheckgroupIdsBySetmealId(id);
        return new Result(true,MessageConstant.QUERY_CHECKGROUP_SUCCESS,checkgroupIds);
    }

    /**
     * 修改
     */
    @PostMapping("/update")
    public Result update(@RequestBody Setmeal setmeal,Integer[] checkgroupIds){
        //调用业务服务修改
        setmealService.update(setmeal,checkgroupIds);
        //响应结果
        return new Result(true,MessageConstant.EDIT_SETMEAL_SUCCESS);
    }

    /**
     * 删除套餐
     * @param id
     * @return
     */
    @PostMapping("deleteById")
    public Result deleteById(Integer id) {
        setmealService.deleteById(id);
        return new Result(true, MessageConstant.DELETE_SETMEAL_SUCCESS);
    }
}
